package com.expert.miniapp.service;

import com.expert.miniapp.dao.UserResourceLibrary;
import com.expert.miniapp.dto.ResourceStatisticsDTO;
import com.expert.miniapp.dto.UserResourceLibraryDTO;
import com.github.pagehelper.PageInfo;

import java.util.Map;

/**
 * UserResourceLibraryService - 用户资源库业务逻辑接口
 *
 * @author System
 * @since 2025-10-28
 */
public interface UserResourceLibraryService {

    /**
     * 添加资源到资源库
     *
     * @param userId 用户ID
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @param notes 用户备注（可选）
     * @return 新创建的资源库记录
     */
    UserResourceLibrary addResource(String userId, String resourceType, String resourceId, String notes);

    /**
     * 获取用户的资源库列表（支持分页、类型筛选、关键词搜索）
     *
     * @param userId 用户ID
     * @param resourceType 资源类型（可选，"all"表示全部）
     * @param keyword 搜索关键词（可选）
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 资源库列表分页信息
     */
    PageInfo<UserResourceLibraryDTO> getResourceList(String userId, String resourceType, String keyword,
                                                      Integer pageNum, Integer pageSize);

    /**
     * 获取用户资源库统计信息
     *
     * @param userId 用户ID
     * @return 统计信息
     */
    ResourceStatisticsDTO getStatistics(String userId);

    /**
     * 检查资源是否已在用户资源库中
     *
     * @param userId 用户ID
     * @param resourceType 资源类型
     * @param resourceId 资源ID
     * @return 检查结果 Map，包含 exists 和 libraryId（如果存在）
     */
    Map<String, Object> checkResourceExists(String userId, String resourceType, String resourceId);

    /**
     * 更新资源库备注
     *
     * @param libraryId 资源库ID
     * @param notes 新备注
     * @return 是否成功
     */
    boolean updateNotes(String libraryId, String notes);

    /**
     * 从资源库删除资源
     *
     * @param libraryId 资源库ID
     * @return 是否成功
     */
    boolean deleteResource(String libraryId);

    /**
     * 获取资源库单个资源的完整详情
     *
     * @param libraryId 资源库ID
     * @return 资源库DTO（包含资源详情），不存在则抛出异常
     */
    UserResourceLibraryDTO getResourceDetail(String libraryId);
}
